package com.train.common.resp;

import com.train.common.enums.Enums;
import com.train.common.status.HttpStatus;
import lombok.NoArgsConstructor;

import java.util.HashMap;

/**
 * 通用返回结果
 */
@NoArgsConstructor
public class CommonResp extends HashMap<String, Object> {
    /**
     * 状态码
     */
    public static final String CODE_TAG = "code";
    /**
     * 返回内容
     */
    public static final String MESSAGE_TAG = "message";
    /**
     * 数据对象
     */
    public static final String DATA_TAG = "data";

    public CommonResp(int code, String message) {
        super.put(CODE_TAG, code);
        super.put(MESSAGE_TAG, message);
    }

    public CommonResp(int code, String message, Object data) {
        super.put(CODE_TAG, code);
        super.put(MESSAGE_TAG, message);
        super.put(DATA_TAG, data);
    }

    public CommonResp(int code, Object data) {
        super.put(CODE_TAG, code);
        super.put(DATA_TAG, data);
    }

    /**
     * 返回成功状态
     * @return
     */
    public static CommonResp ok() {
        return new CommonResp(HttpStatus.SUCCESS, null);
    }

    /**
     * 成功返回数据
     * @param data
     * @return
     */
    public static CommonResp ok(Object data) {
        return new CommonResp(HttpStatus.SUCCESS, null, data);
    }

    /**
     * 成功返回状态、消息、数据
     * @param message
     * @param data
     * @return
     */
    public static CommonResp ok(String message, Object data) {
        return new CommonResp(HttpStatus.SUCCESS, message, data);
    }

    /**
     * 返回自定义正确状态和消息
     * @return 警告消息
     */
    public static CommonResp ok(Integer code, String message) {
        return new CommonResp(code, message);
    }

    /**
     * 返回错误状态
     * @return 警告消息
     */
    public static CommonResp error() {
        return new CommonResp(HttpStatus.ERROR, null);
    }

    /**
     * 返回错误消息
     * @param message
     * @return
     */
    public static CommonResp error(String message) {
        return new CommonResp(HttpStatus.ERROR, message);
    }

    /**
     * 返回错误枚举值
     * @param enums
     * @return
     */
    public static CommonResp error(Enums enums) {
        return new CommonResp(enums.getCode(), enums.getMessage(), null);
    }

    /**
     * 返回错误数据
     * @param data
     * @return
     */
    public static CommonResp error(Object data) {
        return new CommonResp(HttpStatus.ERROR, null, data);
    }

    /**
     * 返回错误状态码和错误数据
     * @param data
     * @return
     */
    public static CommonResp error(Integer code, Object data) {
        return new CommonResp(code, null, data);
    }

    /**
     * 返回错误状态,消息,数据
     * @param message  返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static CommonResp error(String message, Object data) {
        return new CommonResp(HttpStatus.ERROR, message, data);
    }

    /**
     * 返回自定义错误状态和消息
     * @return 警告消息
     */
    public static CommonResp error(Integer code, String message) {
        return new CommonResp(code, message);
    }

    /**
     * 链式调用添加,成功或失败都能灵活使用
     * @param key
     * @param value
     * @return
     */
    public CommonResp put(String key, Object value) {
        super.put(key, value);
        return this;
    }

    /**
     * 根据执行结果判断响应成功还是失败
     * @param isSuccess
     * @return
     */
    public CommonResp isSuccess(boolean isSuccess) {
        return isSuccess? ok() : error();
    }
}
